xentrace: Add an option not to enable tracing
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 13 Apr 2010 17:19:10 +0000 (18:19 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 13 Apr 2010 17:19:10 +0000 (18:19 +0100)
Add an option that will set up the buffers and listen for updates,
but will not enable tracing.  This is useful if you have hacks
in Xen to enable tracing at key points (for example, debugging a
shadow bug).

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
tools/xentrace/xentrace.c

index cce5469c47a8f81d67dfcab63f0e36bb1a553517..db652a2283b410d6aa6ebf87613b3dcc6ee415af 100644 (file)
@@ -58,7 +58,8 @@ typedef struct settings_st {
     unsigned long timeout;
     unsigned long memory_buffer;
     uint8_t discard:1,
-        disable_tracing:1;
+        disable_tracing:1,
+        start_disabled:1;
 } settings_t;
 
 struct t_struct {
@@ -659,6 +660,10 @@ static int monitor_tbufs(void)
 
     /* setup access to trace buffers */
     get_tbufs(&tbufs_mfn, &tinfo_size);
+
+    if ( opts.start_disabled )
+        disable_tbufs();
+    
     tbufs = map_tbufs(tbufs_mfn, num, tinfo_size);
 
     size = tbufs->t_info->tbuf_size * XC_PAGE_SIZE;
@@ -791,6 +796,9 @@ static void usage(void)
 "                          it exits. Selecting this option will tell it to\n" \
 "                          keep tracing on.  Traces will be collected in\n" \
 "                          Xen's trace buffers until they become full.\n" \
+"  -X  --start-disabled    Setup trace buffers and listen, but don't enable\n" \
+"                          tracing. (Useful if tracing will be enabled by\n" \
+"                          else.)\n" \
 "  -T  --time-interval=s   Run xentrace for s seconds and quit.\n" \
 "  -?, --help              Show this message\n" \
 "  -V, --version           Print program version\n" \
@@ -914,12 +922,13 @@ static void parse_args(int argc, char **argv)
         { "memory-buffer",  required_argument, 0, 'M' },
         { "discard-buffers", no_argument,      0, 'D' },
         { "dont-disable-tracing", no_argument, 0, 'x' },
+        { "start-disabled", no_argument,       0, 'X' },
         { "help",           no_argument,       0, '?' },
         { "version",        no_argument,       0, 'V' },
         { 0, 0, 0, 0 }
     };
 
-    while ( (option = getopt_long(argc, argv, "t:s:c:e:S:r:T:M:Dx?V",
+    while ( (option = getopt_long(argc, argv, "t:s:c:e:S:r:T:M:DxX?V",
                     long_options, NULL)) != -1) 
     {
         switch ( option )
@@ -957,6 +966,10 @@ static void parse_args(int argc, char **argv)
             opts.disable_tracing = 0;
             break;
 
+        case 'X': /* Start disabled */
+            opts.start_disabled = 1;
+            break;
+
         case 'T':
             opts.timeout = argtol(optarg, 0);
             break;
@@ -993,6 +1006,7 @@ int main(int argc, char **argv)
     opts.cpu_mask = 0;
     opts.disk_rsvd = 0;
     opts.disable_tracing = 1;
+    opts.start_disabled = 0;
     opts.timeout = 0;
 
     parse_args(argc, argv);